home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / ada / c01oop.zip / CPPWKBK / CPPV5-2.CPP < prev    next >
C/C++ Source or Header  |  1992-08-25  |  1KB  |  78 lines

  1. #define HEADER "C++ Problem 5.2 by Rick Conn using Borland C++"
  2.  
  3. #include <stdio.h>
  4.  
  5. enum pet_kind {doggy, kitty, neither};
  6.  
  7. class pet {
  8.   pet_kind pk;
  9. public:
  10.   pet(pet_kind);
  11.   void speak(void);
  12.   pet_kind type(void);
  13. };
  14.  
  15. class dog : public pet {
  16. public:
  17.   dog();
  18.   void speak(void);
  19. };
  20.  
  21. class cat : public pet {
  22. public:
  23.   cat();
  24.   void speak(void);
  25. };
  26.  
  27. pet::pet(pet_kind kind) {
  28.   pk = kind;
  29. }
  30.  
  31. void pet::speak(void) {
  32.   printf("silence\n");
  33. }
  34.  
  35. pet_kind pet::type(void) {
  36.   return pk;
  37. }
  38.  
  39. dog::dog() : pet(doggy) {
  40.   // nothing to do
  41. }
  42.  
  43. void dog::speak(void) {
  44.   printf("woof\n");
  45. }
  46.  
  47. cat::cat() : pet(kitty) {
  48.   // nothing to do
  49. }
  50.  
  51. void cat::speak(void) {
  52.   printf("meow\n");
  53. }
  54.  
  55. void talk (pet *p) {
  56.   switch (p->type()) {
  57.     case doggy : ((dog *)p) -> speak();
  58.                  break;
  59.     case kitty : ((cat *)p) -> speak();
  60.                  break;
  61.     default    : p -> speak();
  62.                  break;
  63.   }
  64. }
  65.  
  66. void main(void)
  67. {
  68.   printf("%s\n", HEADER);
  69.  
  70.   dog scotty;
  71.   cat fluffy;
  72.   pet funny (neither);
  73.   
  74.   talk(&scotty);
  75.   talk(&fluffy);
  76.   talk(&funny);
  77. }
  78.